perm filename PAVEL[F8,ALS] blob sn#307785 filedate 1977-10-04 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	*************************
C00011 ENDMK
CāŠ—;
*************************
*JOYSTICK TES	*
*************************
*
*
*
*******************************************
*                                         *
*     DECLARATIONS                      *
*                                         *
*******************************************
*
*
XUEQU 	H'0'
XL 	EQU 	H'1'
YU 	EQU 	H'2'
YL 	EQU 	H'3'
HU 	EQU 	H'A'
HL 	EQU 	H'B'
*
*UM1 REGISTERS*
***************
COM 	EQU 	H'8F7'
ZOOM 	EQU 	H'8F6'
BGRN 	EQU 	H'8F5'
YOFF 	EQU 	H'8F4'
XOFF 	EQU 	H'8F3'
FMOD 	EQU 	H'8F2'
TXT 	EQU 	H'8F1'
YINT 	EQU 	H'8F0'
*
XFRZ 	EQU 	H'8F8'
YFRZ 	EQU 	H'8F9'
ODD 	EQU 	H'8FA'
YCUR 	EQU 	H'8FB'
*
RPL 	EQU 	H'800'
RPH 	EQU 	H'810'
DELX 	EQU 	H'820'
DELY 	EQU 	H'830'
XV 	EQU 	H'840'
YVLA 	EQU 	H'850'
YVLB 	EQU 	H'860'
YXA 	EQU 	H'870'
YXB 	EQU 	H'880'
*
*UM1 REGISTER BITS*
*******************
SELA 	EQU 	H'40'
INT 	EQU 	H'08'
ENB 	EQU 	H'04'
FRZ 	EQU 	H'02'
RED 	EQU 	H'80' 	FOR OBJECTS ONLY!
GRN 	EQU 	H'40'
BLU 	EQU 	H'20'
COPY 	EQU 	H'80'
HI 	EQU 	H'40'
LO 	EQU 	H'00'
RB 	EQU 	H'01' 	FOR BACKGROUND ONLY!
GB 	EQU 	H'02'
BB 	EQU 	H'04'
HIB 	EQU 	H'10'
LOB 	EQU 	H'00'
*
*PROGRAM CONSTANTS
******************
SUB 	EQU 	39 	SCREEN UPPER BOUNDARY
SLB 	EQU 	22 	SCREEN LEFT BOUNDARY
*
UPFL	EQU	H'80'	UPDATE FLAG
LTER 	EQU 	-1 	LONG UPDATE TERMINATOR
STER 	EQU 	-2 	SHORT UPDATE TERMINATOR
EVNF 	EQU 	-3 	EVEN FIELD MARKER
NOBJ 	EQU 	1 	NUMBER OF OBJECTS
*
*PROGRAM VARIABLES*
*******************
PST1	EQU	H'8'
TEMP	EQU 	HU
*
*MEMORY ALLOCATION*
*******************
BASE 	EQU 	H'1800' 	LOADING ORIGIN
RAM 	EQU 	H'0C00' 	RAM
PCOM 	EQU 	RAM
JOYT 	EQU 	PCOM+1
DATU 	EQU 	JOYT+32
XVU 	EQU 	DATU+5
YVU 	EQU 	XVU+2
*
*******************************************
*                                         *
*     MAIN PROGRAM                        *
*                                         *
*
*INITIALIZE*
************
 	?RG 	H'1800'
*
 	DI 		DISABLE CPU INTERRUP
 	CLR
 	OUTS 	1 	DISABLE JOYSTICKS
 	OUTS 	6 	DISABLE PSU
 	OUTS 	H'E'	 	DISABLE SMI
*
*INITIALIZE VARIABLES
 	LR 	PST1,A 	PST1 <= 0
 	DCI 	PCOM
 	ST 		PCOM <= 0
*
*INITIALIZE JOYSTICK TABLE
	DCI	JOYT
	LIS 	8
	LR 	HU,A
INIT	LI 	851:	MAXIMUM
 	ST
 	LI 	851.
 	ST
	LI 	575:	MINIMUM
 	ST
 	LI 	575.
 	ST
	DS 	HU
	BNZ	INIT
*
*ZERO UM-1 WRITE ONLY REGISTERS
 	DCI 	YINT
 	LIS 	COM-YINT
 	LR 	TEMP,A
 	PI 	ZERO
*
*CLEAR UM-1 READ/WRITE REGISTERS
 	DCI 	RPL
 	LI 	H'90'
 	LR 	TEMP,A
 	PI 	CLER
*
*MOVE INITIAL DATA INTO RAM
 	DCI 	DATU
 	XDC
 	DCI 	DAT0
 	LI 	NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+11
 	LR 	TEMP,A
 	PI 	MOVE
*
*LOAD UM-1 READ/WRITE REGISTER AND DISPLAY
 	DCI 	DATU	INITIALIZE UM-1 REGISTERS
 	PI 	UPDT
 	CLR
 	LR 	TEMP,A	SYNC ON LINE 0
 	PI 	SYNC
 	LI 	SELA+ENB
 	DCI 	COM 	SELECT LIST A AND
 	ST 		ENABLE UM-1
 	DCI 	PCOM
 	ST 		SET PROGRAM COPY OF COM
*
*MAIN LOOP
LOOP 	LIS 	8
 	LR 	HU,A 	SYNC ON LINE 8
 	PI 	SYNC
	CLR		SET X-VALUE TO
	LR 	QU,A 	3/4*READING+H'13'
	LR 	HU,A
	LR 	A,XU
	LR 	QL,A
	LR 	HL,A
	PI 	AD
	PI 	AD
	LR 	A,QU
	SL 	1
	SL 	1
	SL 	4
	LR 	HU,A
	LR 	A,QL
	SR 	1
	SR 	1
	XS 	HU
	AI 	H'13'
 	DCI 	XVU
 	ST
	LR 	A,XL	SET Y-VALUE TO
	AI 	H'27'	READING+H'27'
 	DCI 	YVU
 	ST
 	DCI 	DATU 	UPDATE UM-1 REGISTERS
 	PI 	UPDT
	LIS 	RB+LOB	CHANGE BGRN TO RED
	DCI	BGRN
	ST
	LIS 	0	SELECT POT
 	LR 	HU,A
	PI 	JOYI	READ POT
 	LR 	XL,A 	SAVE READING
	LIS 	GB+LOB	CHANGE BGRN TO GREEN
	DCI	BGRN
 	ST
	LIS 	1	SELECT NEXT POT
 	LR 	HU,A
	PI 	JOYI	READ POT
 	LR 	XU,A 	SAVE READING
 	CLR 		CLEAR BACKGROUND
 	DCI 	BGRN
 	ST
 	BR 	LOOP 	GO BACK
*******************************************
*                                         *
*     SUBROUTINES                         *
*                                         *
*******************************************
*
*CLEAR UM-1 REGISTERS*
**********************
CLER 	LI 	H'FF' 	REPEAT [
 	ST 	 	   MEM(DC0++) <= H'FF'
 	DS 	TEMP 	   TEMP <= TEMP-1]
 	BNZ 	*-2 	UNTIL TEMP=0
 	POP 	 	RETURN
*
*MOVE DATA IN MEMORY*
*********************
MOVE 	LR 	K,P
 	LM
 	XDC
 	ST 	 	REPEAT [
 	XDC 	 	   MEM(DC1++) <= MEM(DC0)
 	DS 	TEMP 	   TEMP <= TEMP-1]
 	BNZ 	MOVE+1 	UNTIL TEMP=0
 	PK 	 	RETURN
*
*ZERO MEMORY*
*************
ZERO 	CLR 	 	REPEAT [
 	ST 	 	   MEM(DC0++) <= 0
 	DS 	TEMP 	   TEMP <= TEMP-1
 	BNZ 	*-2 	UNTIL TEMP=0
 	POP 	 	RETURN
*
*SYNC ON A GIVEN LINE .GT. 7*
***************************
SYNC 	LR 	K,P
 	LR 	A,TEMP
 	DCI 	YCUR
 	CM 	 	REPEAT []
 	BNZ 	*-4 	UNTIL YCUR=TEMP
 	PK 	 	RETURN
*
*UPDATE ROUTINE*
****************
UPDT 	LR 	K,P
UPD0 	LM 	 	REPEAT [
 	LR 	TEMP,A 	   TEMP <= MEM(DC0++)
UPD1CI 	LTER 	   IF TEMP=LTER [
 	BNZ 	UPD2
 	LR 	A,PST1
 	OI 	UPFL 	      UPFL <= 1
 	LR 	PST1,A 	      RETURN
 	PK 	 	      ]
UPD2 	CI 	STER 	      ]
 	BNZ 	UPD3 	   ELSEIF TEMP=STER [
 	CLR 	 	      IF UPFL=1 [
 	XS 	PST1 	         RETURN
 	BP 	UPD0 	         ]
 	PK 	 	      ]
UPD3 	LR 	A,TEMP
 	CI 	EVNF
 	BNZ 	UPD4 	   ELSIIF TEMP=ODDF [
 	XDC
 	DCI 	ODD
 	LM 	 	      ACC <= MEM(DC0++)
 	NS 	PST1
 	XDC 	 	      IF FLD=ODD
 	LM 	 	   AND UPFL=SHRT [
 	BP 	*+3 	         DC0<=DC0+ACC
 	ADC 	 	         ]
 	BR 	UPD0 	      ]
UPD4 	LR 	A,TEMP 	   ELSE [
 	XDC
 	DCI 	RPL
 	ADC
 	XDC 	 	      DC1 <= RPL+TEMP
 	LI 	NOBJ 	      MOVE(DC0,DC1,
 	LR 	TEMP,A 	         NOBJ)
 	LM
 	XDC
 	ST
 	XDC
 	DS 	TEMP
 	BNZ 	*-5 	      ]
 	BR 	UPD0 	]